package com.zmcn.flowindex.business.user.service.impl;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.zmcn.flowindex.bean.po.User;
import com.zmcn.flowindex.bean.vo.UserVO;
import com.zmcn.flowindex.business.user.dao.UserDao;
import com.zmcn.flowindex.business.user.service.UserService;
import com.zmcn.flowindex.business.user.vo.UserExVO;
import com.zmcn.flowindex.fw.action.Page;

/**
 * 
 * 用户管理接口实现
 * 
 * @author <b>欧建东<br/>
 *         Email:oyjd@163.com</b>
 * @version 1.0
 */
@Component
@Transactional(readOnly = true)
public class UserServiceImpl implements UserService {
	private UserDao dao;

	@Autowired
	public void setDao(UserDao dao) {
		this.dao = dao;
	}

	/**
	 * 查询用户列表
	 * 
	 * @param page
	 *            页面对象
	 * @return
	 */
	public Page<UserExVO> getList(Page<UserExVO> page) {
		return dao.getList(page);
	}

	/**
	 * 根据用户ID获取用户信息
	 * 
	 * @param userId
	 *            用户ID
	 * @return
	 */
	public UserVO getUser(String userId) {
		return dao.getUser(userId);
	}

	/**
	 * 根据帐号获取用户信息
	 * 
	 * @param account
	 * @return
	 */
	public UserVO getUserByAccount(String account) {
		return dao.getUserByAccount(account);
	}

	/**
	 * 新增用户
	 * 
	 * @param roleId
	 *            角色
	 * @param account
	 *            帐号
	 * @param pwd
	 *            密码
	 * @param name
	 *            姓名
	 * @param sex
	 *            性别
	 * @param birthday
	 *            生日
	 * @param phone
	 *            电话
	 * @param email
	 *            电子邮件
	 * @param idcard
	 *            身份证
	 * @param user
	 *            当前用户
	 */
	@Transactional(readOnly = false)
	public void add(String roleId, String account, String pwd, String name, int sex, Date birthday, String phone, String email, String idcard, String user) {
		Date date = new Date();
		User u = new User();
		u.setRoleId(roleId);
		u.setAccount(account);
		u.setPwd(pwd);
		u.setName(name);
		u.setSex(sex);
		u.setBirthday(birthday);
		u.setPhone(phone);
		u.setEmail(email);
		u.setIdcard(idcard);
		u.setCreator(user);
		u.setCreateTime(date);
		u.setLastEditor(user);
		u.setLastUpdateTime(date);
		u.setStatus(0);
		dao.create(u);
	}

	/**
	 * 修改用户
	 * 
	 * @param userId
	 *            用户ID
	 * @param roleId
	 *            角色
	 * @param name
	 *            姓名
	 * @param sex
	 *            性别
	 * @param birthday
	 *            生日
	 * @param phone
	 *            电话
	 * @param email
	 *            电子邮件
	 * @param idcard
	 *            身份证
	 * @param user
	 *            当前用户
	 */
	@Transactional(readOnly = false)
	public void edit(String userId, String roleId, String name, int sex, Date birthday, String phone, String email, String idcard, String user) {
		Date date = new Date();
		User u = (User) dao.queryById(User.class, userId);
		u.setRoleId(roleId);
		u.setName(name);
		u.setSex(sex);
		u.setBirthday(birthday);
		u.setPhone(phone);
		u.setEmail(email);
		u.setIdcard(idcard);
		u.setLastEditor(user);
		u.setLastUpdateTime(date);
		dao.update(u);
	}

	/**
	 * 管理员重置密码
	 * 
	 * @param userId
	 *            用户ID
	 * @param pwd
	 *            新密码
	 */
	@Transactional(readOnly = false)
	public void resetPwd(String userId, String pwd) {
		User user = (User) dao.queryById(User.class, userId);
		user.setPwd(pwd);
		dao.update(user);
	}

	/**
	 * 删除用户
	 * 
	 * @param ids
	 *            用户ID
	 * @param user
	 *            当前操作者
	 */
	@Transactional(readOnly = false)
	public void remove(String[] ids) {
		dao.remove(ids);
	}

	/**
	 * 修改个人资料
	 * 
	 * @param userId
	 *            用户ID
	 * @param name
	 *            姓名
	 * @param sex
	 *            性别
	 * @param birthday
	 *            生日
	 * @param phone
	 *            电话
	 * @param email
	 *            电子邮件
	 * @param idcard
	 *            身份证
	 * @param user
	 *            当前用户
	 */
	@Transactional(readOnly = false)
	public void personEdit(String userId, String name, int sex, Date birthday, String phone, String email, String idcard, String user) {
		Date date = new Date();
		User u = (User) dao.queryById(User.class, userId);
		u.setName(name);
		u.setSex(sex);
		u.setBirthday(birthday);
		u.setPhone(phone);
		u.setEmail(email);
		u.setIdcard(idcard);
		u.setLastEditor(user);
		u.setLastUpdateTime(date);
		dao.update(u);
	}

	/**
	 * 修改个人密码
	 * 
	 * @param userId
	 *            用户ID
	 * @param oldPwd
	 *            旧密码
	 * @param newPwd
	 *            新密码
	 */
	@Transactional(readOnly = false)
	public boolean personResetPwd(String userId, String oldPwd, String newPwd) {
		boolean flag = false;
		User user = (User) dao.getSession().load(User.class, userId);
		if (oldPwd.equals(user.getPwd())) {
			user.setPwd(newPwd);
			dao.update(user);
			flag = true;
		}
		return flag;
	}

}
